package scala.com.shujia.jichu

object Demo7Class {
  def main(args: Array[String]): Unit = {
    //    val s1: Student = new Student()

    //    val s1: Student = new Student("易政",18)
    val s2: Student = new Student("易政", 18, "男")

    println(s2)

    //如果调用的是一个类的无参构造方法，new的时候小括号可以不用写
    val s3: Student2 = new Student2
    s3.fun1()

    //也可以使用多态的方式创建对象
    val s4:Object = new Student("易政3", 19, "男")
//    s4.fun1()
    println(s4.toString)
  }
}

/**
 * 可以在scala程序定义类
 * 类：构造方法 成员方法 成员变量
 *
 * 构造方法：
 * 1、在scala中构造方法的编写和在java中不太一样，类所拥有的大括号中都是构造代码块的内容
 * 2、默认情况下，每一个类都应该提供一个无参的构造方法
 * 3、构造方法可以有许多
 */
class Student(name: String, age: Int) {
  /**
   * 定义成员变量
   */
  val _name: String = name
  val _age: Int = age
  var _gender: String = _ // 这个下划线，就表示将来会赋予默认值

  /**
   * 构造方法也可以写多个
   */
  def this(name: String, age: Int, gender: String) {
    this(name: String, age: Int)
    _gender = gender
  }

  //  println("好好学习，天天向上！")


  /**
   * 也可以重写方法
   */
  override def toString: String = {
    "姓名:" + _name + ", 年龄:" + _age + ", 性别:" + _gender
  }

  //  override def toString: String = super.toString
}

class Student2{
  def fun1()={
    println("数加666")
  }
}